Materi OSN-K

Memori Lokal, Variabel & Tipe Data Dasar

Dalam persoalan dasar OSN-K, kamu diharuskan memiliki insting membaca alur program layaknya sebuah *compiler* untuk memperkirakan nilai akhir memori (Tracing memory).

👩‍🏫 Secara Formal:

Variabel adalah lokasi memori yang diberi nama untuk menyimpan data. Dalam bahasa C++, variabel beroperasi secara primitif: nilai lama akan ditimpa (overwrite) seutuhnya ketika terjadi *assignment* baru. Status memori harus dilacak baris demi baris secara skuensial. Awas jebakan tipe int, e.g. 5 / 2 = 2 bukan 2.5.

Analogi Jaman Now

"Bayangin variabel itu kayak loker kecil di stasiun yang cuma muat 1 barang. Kalau loker X awalnya berisi 'Sepatu', terus kamu paksa masukin 'Tas' kesana, maka si sepatu itu langsung dibuang dan hilang selamanya. Komputer gak punya history/riwayat, dia cuma peduli barang terakhir."

Visualisasi Tracing Variabel

// Simulasi Eksekusi C++
int a = 5;
int b = a + 2;
a = b - 1;
b = a * a;
Paused

Lab Mandiri: Coba Tracing Sendiri!

Hitung manual nilai akhir X dan Y dari logika kode di bawah ini layaknya soal OSN Kabupaten.

int x = 10;
int y = 5;
x = x + y;
y = x - y;
x = x - y;
x = x * 2;
Materi OSN-K

Logika Percabangan & If-Else

Menjalankan blok kode kondisional berbekal nilai operator perbandingan logika Boolean sejati.

👩‍🏫 Secara Formal:

Blok pernyataan IF dapat membelokkan eksekusi alur logika selagi kondisinya true. Keunikan dari C++ adalah Short-Circuit Evaluation. Jika ada (A && B), dan A sudah false, maka sistem tidak akan mengecek lagi sebelah kanannya karena otomatis pasti false.

Analogi Jaman Now

"Fitur logik && (AND) layaknya syarat ngedate: (Baik && Anak_Sultan). Kalo ternyata aslinya dia Baik = False, kamu gaperlu lagi susah-susah ngecek apakah dia anak sultan atau bukan, relasinya otomatis gagal saat itu juga dan langsung di Skip!"

Visualisasi Short-Circuit Evaluation

// Evaluasi Ekspresi #1
bool kondisi1 = (5 > 2) && (10 != 10);

// Evaluasi Ekspresi #2
bool kondisi2 = (!false) || (3 <= 1);
Paused

Lab OSN: Truth Checker

Evaluasi nilai kebenaran akhir dari kumpulan percabangan memusingkan yang rawan menjebak peserta Olimpiade di bawah ini:

(5 > 2) && (10 != 10)
!false || (3 <= 1)
Materi OSN-K

Paradoks Loop (Perulangan)

Mengukur kemampuan fundamental programmer untuk memprediksi seberapa banyak eksekusi repetitif dievaluasi.

👩‍🏫 Secara Formal:

Mekanisme for loop selalu mengeksekusi urutan mutlak ini: 1) Initialisasi i=0 hanya sekali diawal, 2) Evaluasi Syarat boolean (Lanjut/Stop), 3) Pengeksekusian Baris di dalam blok kurung kurawal, 4) Perubahan modifier seperti i++.

Analogi Jaman Now

"Mikirin For loop tuh layaknya settingan mesin Fotokopi. i < 10 (Syarat berhenti) adalah jatah maksimum batas lembar fotokopi yang diizinkan. Kalau modifier-nya dihilangkan oleh Hacker OSN (Infinity Loop), mesinnya bakal jalan non-stop terus-menerus sampe tintanya hangus!"

Visualisasi Eksekusi Loop ( i & j )

// Loop Simulator
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= i; j++) {
        print("Bintang");
    }
}
Paused

Lab OSN: Prediksi Iterasi Loop Bersarang

Berapa kali persisnya sistem akan mencetak string "Bintang" pada potongan C++ ini?

int count = 0;
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= i; j++) {
        print("Bintang");
        count++;
    }
}
Materi OSN-K

Konsep Fungsi & Scope Variabel

Cara memisahkan blok logika dalam sebuah ruang tertutup yang memiliki memori privat sendiri (*Scope/Scope Boundary*).

👩‍🏫 Secara Formal:

Dalam C++, Fungsi adalah sub-program yang memiliki lokalisasi memori (Local Scope). Variabel yang dibuat di dalam fungsi akan hancur/dibebaskan ketika fungsi berakhir. Pemanggilan argumen default dilakukan dengan Pass-by-Value (Nilai dikopi, asli tidak berubah), sedangkan menggunakan simbol & (Ampersand) disebut Pass-by-Reference (Alias ke memori asli, aslinya ikut berubah).

Analogi Jaman Now

"Pass by Value itu ibarat ada teman nitip catetan tugas ke kamu. Kamu fotokopi catetannya, terus kamu coret-coret kopiannya. Catetan aslinya tetap aman, kan? Nah, kalau Pass by Reference, kamu minjem buku aslinya langsung. Kalau kamu coret, ya buku aslinya ikut rusak karena itu satu buku yang sama!"

Visualisasi Copy vs Reference

// Pass by Value vs Reference
void addFive(int x) { // Pass by Value
    x = x + 5;
}

void addFiveRef(int &y) { // Pass by Reference
    y = y + 5;
}

// Simulasi Main
int a = 10;
int b = 10;

addFive(a);    // A tetap 10
addFiveRef(b); // B jadi 15
Paused

Lab OSN: Tracing Amperstand Teka-teki

Tebak output kode C++ dengan pemanggilan by-Reference ini!

void testFunc(int x, int &y) {
    x = x + 5;
    y = y + 5;
}

int main() {
    int a = 10;
    int b = 10;
    testFunc(a, b);
    // Berapakah nilai a dan b sekarang?
}